package com.plx.aspect; // 替换为你的项目包名

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

// 标记这是一个切面类
@Aspect
// 让Spring容器管理这个类
@Component
public class MapperCacheAspect {

    // 注入Redis模板，用于操作Redis缓存
    @Autowired
    private RedisTemplate redisTemplate;

    // 定义员工列表的缓存key（要和查询方法中的key一致）
    private static final String EMPLOYEES_CACHE_KEY = "employeesList";

    /**
     * 拦截Mapper层中所有修改员工数据的方法，执行后清除缓存
     * 表达式含义：
     * execution(* com.yourproject.mapper.EmployeeMapper.update*(..))
     * → 匹配EmployeeMapper中所有以update开头的方法
     * 同理，insert*匹配新增方法，delete*匹配删除方法
     */
    @AfterReturning("execution(* com.plx.mapper.EmployeesMapper.Mupdata*(..)) || " +
            "execution(* com.plx.mapper.EmployeesMapper.addEmp*(..)) || " +
            "execution(* com.plx.mapper.EmployeesMapper.deleteById*(..))")
    public void clearEmployeeCacheAfterModify() {
        // 当Mapper层执行了修改/新增/删除方法后，删除Redis中对应的缓存
        redisTemplate.delete(EMPLOYEES_CACHE_KEY);
        // 可选：打印日志，方便调试
        System.out.println("员工数据已修改，清除缓存：" + EMPLOYEES_CACHE_KEY);
    }
}
